#pragma once
#include "Poller.h" // 需要知道基类的详细情况

#include<vector>
#include<sys/epoll.h>
#include"Timestamp.h"
/**
 * epoll 的使用
 * epoll_create
 * epoll_ctl   add/mod/del
 * epoll_wait
*/
class EPollPoller : public Poller
{
public:
EPollPoller(EventLoop* loop); // epoll_create
~EPollPoller() override;// 编译器检查是否有实现，基类是否是virtual

// 重写基类Poller的抽象方法
Timestamp poll(int timeoutms,ChannelList* activeChannels) override;
void updateChannel(Channel* channel) override;
void removeChannel(Channel * channel) override;
private:
static const int kInitEventListSize = 16; // std::vector<struct epoll_event> 的初始值

// 填写活跃的链接
void fillActiveChannels(int numEvents,ChannelList* activeChannels) const;
// 更新channel通道
void update(int operation,Channel* channel);

using EventList = std::vector<struct epoll_event>;
int epollfd_; // epoll_create 的返回值
EventList events_; //  就是上层的一次性能拿上来的最大的这个底层就绪的数组。
};